@@ -10,6 +10,7 @@ |
||
| 10 | 10 |
<!-- bower:css --> |
| 11 | 11 |
<link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" /> |
| 12 | 12 |
<link rel="stylesheet" href="bower_components/angularjs-slider/dist/rzslider.css" /> |
| 13 |
+ <link rel="stylesheet" href="bower_components/angular-bootstrap-lightbox/dist/angular-bootstrap-lightbox.css" /> |
|
| 13 | 14 |
<!-- endbower --> |
| 14 | 15 |
<!-- endbuild --> |
| 15 | 16 |
<!-- build:css(.tmp) styles/main.css --> |
@@ -104,6 +105,8 @@ |
||
| 104 | 105 |
<script src="bower_components/angular-touch/angular-touch.js"></script> |
| 105 | 106 |
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script> |
| 106 | 107 |
<script src="bower_components/angularjs-slider/dist/rzslider.js"></script> |
| 108 |
+ <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script> |
|
| 109 |
+ <script src="bower_components/angular-bootstrap-lightbox/dist/angular-bootstrap-lightbox.js"></script> |
|
| 107 | 110 |
<!-- endbower --> |
| 108 | 111 |
<!-- endbuild --> |
| 109 | 112 |
|
@@ -19,8 +19,15 @@ angular |
||
| 19 | 19 |
'ngSanitize', |
| 20 | 20 |
'ngTouch', |
| 21 | 21 |
'ui.router', |
| 22 |
- 'rzModule' |
|
| 22 |
+ 'rzModule', |
|
| 23 |
+ 'bootstrapLightbox' |
|
| 23 | 24 |
]) |
| 25 |
+ |
|
| 26 |
+ .config(function (LightboxProvider) {
|
|
| 27 |
+ // set a custom template |
|
| 28 |
+ LightboxProvider.templateUrl = 'views/lightbox-template.html'; |
|
| 29 |
+ }) |
|
| 30 |
+ |
|
| 24 | 31 |
.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', function($stateProvider, $urlRouterProvider, $httpProvider) {
|
| 25 | 32 |
// Configs |
| 26 | 33 |
//Enable cross domain calls |
@@ -8,7 +8,7 @@ |
||
| 8 | 8 |
* Controller of the siteOficinaItapetiApp |
| 9 | 9 |
*/ |
| 10 | 10 |
angular.module('siteOficinaItapetiApp')
|
| 11 |
- .controller('MainCtrl', [ '$window', '$scope', '$rootScope', '$http', function ($window, $scope, $rootScope, $http) {
|
|
| 11 |
+ .controller('MainCtrl', [ '$window', '$scope', '$rootScope', '$http', 'Lightbox', function ($window, $scope, $rootScope, $http, Lightbox) {
|
|
| 12 | 12 |
$window.scrollTo(0, 0); |
| 13 | 13 |
|
| 14 | 14 |
$scope.Math = window.Math; |
@@ -54,7 +54,93 @@ angular.module('siteOficinaItapetiApp')
|
||
| 54 | 54 |
}); |
| 55 | 55 |
}; |
| 56 | 56 |
|
| 57 |
- |
|
| 57 |
+ $scope.images = [ |
|
| 58 |
+ {
|
|
| 59 |
+ 'url': 'images/boardgame-chips.jpg', |
|
| 60 |
+ 'caption': 'Fichas para jogo de tabuleiro cortadas a laser', |
|
| 61 |
+ 'thumbUrl': 'images/thumb-boardgame-chips.jpg' // used only for this example |
|
| 62 |
+ }, |
|
| 63 |
+ {
|
|
| 64 |
+ 'url': 'images/boardgame-factory.jpg', |
|
| 65 |
+ 'caption': 'Peças para jogo de tabuleiro cortadas a laser', |
|
| 66 |
+ 'thumbUrl': 'images/thumb-boardgame-factory.jpg' |
|
| 67 |
+ }, |
|
| 68 |
+ {
|
|
| 69 |
+ 'url': 'images/boardgame-factory-makingof.jpg', |
|
| 70 |
+ 'caption': 'Edição de vetores de peças para jogo de tabuleiro', |
|
| 71 |
+ 'thumbUrl': 'images/thumb-boardgame-factory-makingof.jpg' |
|
| 72 |
+ }, |
|
| 73 |
+ {
|
|
| 74 |
+ 'url': 'images/boardgame-minerals.jpg', |
|
| 75 |
+ 'caption': 'Fichas para jogo de tabuleiro cortadas a laser', |
|
| 76 |
+ 'thumbUrl': 'images/thumb-boardgame-minerals.jpg' |
|
| 77 |
+ }, |
|
| 78 |
+ |
|
| 79 |
+ {
|
|
| 80 |
+ 'url': 'images/zombicide-porta.jpg', |
|
| 81 |
+ 'caption': 'Porta miniatura impressa em 3d para o jogo Zombicide', |
|
| 82 |
+ 'thumbUrl': 'images/thumb-zombicide-porta.jpg' |
|
| 83 |
+ }, |
|
| 84 |
+ {
|
|
| 85 |
+ 'url': 'images/goldtone-amp-prototipo.jpg', |
|
| 86 |
+ 'caption': 'Prototipo de um amplificador valvulado para GoldTone', |
|
| 87 |
+ 'thumbUrl': 'images/thumb-goldtone-amp-prototipo.jpg' |
|
| 88 |
+ }, |
|
| 89 |
+ {
|
|
| 90 |
+ 'url': 'images/quad-luzes.png', |
|
| 91 |
+ 'caption': 'Quadcoptero com o sistema de luzes ligado', |
|
| 92 |
+ 'thumbUrl': 'images/thumb-quad-luzes.jpg' |
|
| 93 |
+ }, |
|
| 94 |
+ {
|
|
| 95 |
+ 'url': 'images/copo-quad.png', |
|
| 96 |
+ 'caption': 'Suporte de motor do quadcoptero corta a laser em acrilico', |
|
| 97 |
+ 'thumbUrl': 'images/thumb-copo-quad.jpg' |
|
| 98 |
+ }, |
|
| 99 |
+ {
|
|
| 100 |
+ 'url': 'images/quad-solidworks.jpg', |
|
| 101 |
+ 'caption': 'Desenhando o corpo do quadcoptero no software Solidoworks', |
|
| 102 |
+ 'thumbUrl': 'images/thumb-quad-solidworks.jpg' |
|
| 103 |
+ }, |
|
| 104 |
+ {
|
|
| 105 |
+ 'url': 'images/endossa-cubos.jpg', |
|
| 106 |
+ 'caption': 'Peças de isopor cortadas a laser com acabamento para um painel', |
|
| 107 |
+ 'thumbUrl': 'images/thumb-endossa-cubos.jpg' |
|
| 108 |
+ }, |
|
| 109 |
+ {
|
|
| 110 |
+ 'url': 'images/theremin-1.jpg', |
|
| 111 |
+ 'caption': 'Painel de acrilico com etching cortado a laser', |
|
| 112 |
+ 'thumbUrl': 'images/thumb-theremin-1.jpg' |
|
| 113 |
+ }, |
|
| 114 |
+ {
|
|
| 115 |
+ 'url': 'images/theremin-2.png', |
|
| 116 |
+ 'caption': 'Detalhe do etching no acrilico com pintura', |
|
| 117 |
+ 'thumbUrl': 'images/thumb-theremin-2.jpg' |
|
| 118 |
+ }, |
|
| 119 |
+ {
|
|
| 120 |
+ 'url': 'images/gimbal-madeira.jpg', |
|
| 121 |
+ 'caption': 'Projeto de estabilizador de camera cortado a laser', |
|
| 122 |
+ 'thumbUrl': 'images/thumb-gimbal-madeira.jpg' |
|
| 123 |
+ }, |
|
| 124 |
+ {
|
|
| 125 |
+ 'url': 'images/gimbal-plastico.jpg', |
|
| 126 |
+ 'caption': 'Estabilizador de camera impresso em 3d', |
|
| 127 |
+ 'thumbUrl': 'images/thumb-gimbal-plastico.jpg' |
|
| 128 |
+ }, |
|
| 129 |
+ {
|
|
| 130 |
+ 'url': 'images/quad-placa.jpg', |
|
| 131 |
+ 'caption': 'Base de acrilico cortada a laser', |
|
| 132 |
+ 'thumbUrl': 'images/thumb-quad-placa.jpg' |
|
| 133 |
+ }, |
|
| 134 |
+ {
|
|
| 135 |
+ 'url': 'images/detalhe-amp.png', |
|
| 136 |
+ 'caption': 'Pintura em acabamento de coro de um aplificado GoldTone', |
|
| 137 |
+ 'thumbUrl': 'images/thumb-detalhe-amp.jpg' |
|
| 138 |
+ } |
|
| 139 |
+ ]; |
|
| 140 |
+ |
|
| 141 |
+ $scope.openLightboxModal = function (index) {
|
|
| 142 |
+ Lightbox.openModal($scope.images, index); |
|
| 143 |
+ }; |
|
| 58 | 144 |
|
| 59 | 145 |
|
| 60 | 146 |
}]); |
@@ -179,3 +179,13 @@ h1 a, h2 a, h3 a, h4 a, h5 a { cursor: pointer; }
|
||
| 179 | 179 |
} |
| 180 | 180 |
|
| 181 | 181 |
a:hover { cursor: pointer;}
|
| 182 |
+ |
|
| 183 |
+.lightbox-image-caption span {
|
|
| 184 |
+ font-family: helvetica; |
|
| 185 |
+ color: #777; |
|
| 186 |
+ |
|
| 187 |
+} |
|
| 188 |
+.lightbox-image-caption {
|
|
| 189 |
+ margin: 1.1em 15px; |
|
| 190 |
+ font-size: 1.1em; |
|
| 191 |
+} |
@@ -0,0 +1,46 @@ |
||
| 1 |
+<div class="modal-body" |
|
| 2 |
+ ng-swipe-left="Lightbox.nextImage()" |
|
| 3 |
+ ng-swipe-right="Lightbox.prevImage()"> |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+ <div class="lightbox-image-caption"> |
|
| 7 |
+ <span >{{Lightbox.imageCaption}}</span>
|
|
| 8 |
+ </div> |
|
| 9 |
+ <div class="lightbox-nav"> |
|
| 10 |
+ <!-- caption --> |
|
| 11 |
+ |
|
| 12 |
+ <!-- close button --> |
|
| 13 |
+ <button class="close" aria-hidden="true" ng-click="$dismiss()">×</button> |
|
| 14 |
+ </div> |
|
| 15 |
+ |
|
| 16 |
+ <div class="lightbox-image-container"> |
|
| 17 |
+ |
|
| 18 |
+ <!-- image --> |
|
| 19 |
+ <img ng-if="!Lightbox.isVideo(Lightbox.image)" |
|
| 20 |
+ lightbox-src="{{Lightbox.imageUrl}}">
|
|
| 21 |
+ |
|
| 22 |
+ <!-- video --> |
|
| 23 |
+ <div ng-if="Lightbox.isVideo(Lightbox.image)" |
|
| 24 |
+ class="embed-responsive embed-responsive-16by9"> |
|
| 25 |
+ <!-- video file embedded directly --> |
|
| 26 |
+ <video ng-if="!Lightbox.isSharedVideo(Lightbox.image)" |
|
| 27 |
+ lightbox-src="{{Lightbox.imageUrl}}"
|
|
| 28 |
+ controls |
|
| 29 |
+ autoplay="true"> |
|
| 30 |
+ </video> |
|
| 31 |
+ |
|
| 32 |
+ <!-- video embedded with an external service using |
|
| 33 |
+ `ng-videosharing-embed` --> |
|
| 34 |
+ <embed-video ng-if="Lightbox.isSharedVideo(Lightbox.image)" |
|
| 35 |
+ lightbox-src="{{Lightbox.imageUrl}}"
|
|
| 36 |
+ ng-href="{{Lightbox.imageUrl}}"
|
|
| 37 |
+ iframe-id="lightbox-video" |
|
| 38 |
+ class="embed-responsive-item"> |
|
| 39 |
+ <a ng-href="{{Lightbox.imageUrl}}">Watch video</a>
|
|
| 40 |
+ </embed-video> |
|
| 41 |
+ |
|
| 42 |
+ </div> |
|
| 43 |
+ </div> |
|
| 44 |
+ |
|
| 45 |
+ |
|
| 46 |
+</div> |
@@ -6,7 +6,7 @@ |
||
| 6 | 6 |
</div> |
| 7 | 7 |
</div> |
| 8 | 8 |
</div> |
| 9 |
- <img src="images/foto_01.jpg" alt="..." style="width: 100%;"> |
|
| 9 |
+ <img src="images/laser-poster.jpg" alt="..." style="width: 100%;"> |
|
| 10 | 10 |
</div> |
| 11 | 11 |
|
| 12 | 12 |
<div class="container last"> |
@@ -1,5 +1,9 @@ |
||
| 1 | 1 |
<div class="container last" style="margin-top: 53px;"> |
| 2 | 2 |
<h1 class="page-header">Portfolio</h1> |
| 3 |
- |
|
| 4 |
- |
|
| 3 |
+ <div class="row"> |
|
| 4 |
+ <div class="col-xs-4 col-md-3" ng-repeat="image in images"> |
|
| 5 |
+ <a ng-click="openLightboxModal($index)" class="thumbnail"> |
|
| 6 |
+ <img ng-src="{{image.thumbUrl}}">
|
|
| 7 |
+ </a> |
|
| 8 |
+ </div> |
|
| 5 | 9 |
</div> |
@@ -13,7 +13,8 @@ |
||
| 13 | 13 |
"angular-sanitize": "^1.4.0", |
| 14 | 14 |
"angular-touch": "^1.4.0", |
| 15 | 15 |
"angular-ui-router": "^0.3.1", |
| 16 |
- "angularjs-slider": "^5.4.1" |
|
| 16 |
+ "angularjs-slider": "^5.4.1", |
|
| 17 |
+ "angular-bootstrap-lightbox": "^0.12.0" |
|
| 17 | 18 |
}, |
| 18 | 19 |
"devDependencies": {
|
| 19 | 20 |
"angular-mocks": "^1.4.0" |
@@ -33,6 +33,8 @@ module.exports = function(config) {
|
||
| 33 | 33 |
'bower_components/angular-touch/angular-touch.js', |
| 34 | 34 |
'bower_components/angular-ui-router/release/angular-ui-router.js', |
| 35 | 35 |
'bower_components/angularjs-slider/dist/rzslider.js', |
| 36 |
+ 'bower_components/angular-bootstrap/ui-bootstrap-tpls.js', |
|
| 37 |
+ 'bower_components/angular-bootstrap-lightbox/dist/angular-bootstrap-lightbox.js', |
|
| 36 | 38 |
'bower_components/angular-mocks/angular-mocks.js', |
| 37 | 39 |
// endbower |
| 38 | 40 |
'app/scripts/**/*.js', |